package com.kookapi.service;


import com.kookapi.business.domain.ApiDefinition;
import com.kookapi.business.domain.TestScenario;
import com.kookapi.business.domain.TestScenarioData;
import com.kookapi.business.domain.TestStep;
import io.qameta.allure.model.TestResult;
import io.qameta.allure.model.TestResultContainer;
import io.restassured.response.Response;

import java.util.Map;

/**
 * @author bairimengchang
 * @version 1.0
 * @project java-test
 * @description 阿鲁报告业务接口
 * @date 2025/10/2
 */
public interface AllureReportService {

    /**
     * 启动测试容器
     *
     * @param testScenario 测试场景
     * @return 测试容器（后面场景关联测试用例需要用）
     */
    TestResultContainer startTestContainer(TestScenario testScenario);

    /**
     * 创建测试结果对象（初始化）
     *
     * @param scenarioData 测试场景数据
     * @return 初始的测试结果对象
     */
    TestResult getTestResultInit(
            TestScenario testScenario,
            TestScenarioData scenarioData,
            TestResultContainer testResultContainer
    );

    /**
     * 记录阿鲁报告HTTP请求和响应信息（作为附件展示）
     *
     * @param testStep   测试步骤
     * @param apiDef     接口定义
     * @param headersMap 请求头
     * @param actualUrl  请求URL
     * @param actualBody 请求体
     * @param response   响应
     */
    void recordHttpRequestResponse(
            TestStep testStep,
            ApiDefinition apiDef,
            Map<String, String> headersMap,
            String actualUrl,
            String actualBody,
            Response response
    );

    /**
     * 生成HTML报告
     *
     * @param taskId 任务ID
     */
    boolean generateHtmlReport(Long taskId);

}
